package cc.rengu.oltp.service.realize;

import cc.rengu.oltp.service.common.entity.TxnSensitiveCfg;

import java.util.List;
import java.util.Map;

/**
 * 敏感信息处理服务
 * Created by wangcheng on 2021/4/28 10:24
 */
public interface SensitiveInfoService {
    /**
     * 交易敏感信息脱敏
     *
     * @param cacheName 缓存名称
     * @param cacheTime 缓存时间
     * @return 敏感信息脱敏前后的对应关系
     * @throws Exception 异常
     */
    Map<String, String> desensitise(String cacheName, String cacheTime) throws Exception;

    /**
     * 交易敏感信息脱敏
     *
     * @param txnSensitiveCfgList 交易敏感信息配置信息
     * @param cacheName           缓存名称
     * @param cacheTime           脱敏信息缓存有效时长
     * @return 敏感信息脱敏前后的对应关系
     * @throws Exception 异常
     */
    Map<String, String> desensitise(List<TxnSensitiveCfg> txnSensitiveCfgList, String cacheName, String cacheTime) throws Exception;

    /**
     * 敏感信息脱敏
     *
     * @param field      待脱敏字段名
     * @param fieldValue 待脱敏字段值
     * @param fieldType  待脱敏字段类型
     * @param cacheName  缓存名称
     * @param cacheTime  脱敏信息缓存时长
     * @return 敏感信息脱敏前后的对应关系
     * @throws Exception 异常
     */
    Map<String, String> desensitise(String field, String fieldValue, String fieldType, String cacheName, String cacheTime) throws Exception;

    /**
     * 敏感字段脱敏信息恢复
     *
     * @param cacheName 会话标识
     * @return 敏感信息恢复前后的对应关系
     * @throws Exception 异常
     */
    Map<String, String> recovery(String cacheName) throws Exception;

    /**
     * 敏感字段脱敏信息恢复
     *
     * @param txnSensitiveCfgList 交易敏感信息配置信息
     * @param cacheName           缓存名称
     * @return 敏感信息恢复前后的对应关系
     * @throws Exception 异常
     */
    Map<String, String> recovery(List<TxnSensitiveCfg> txnSensitiveCfgList, String cacheName) throws Exception;

    /**
     * 敏感字段脱敏信息恢复
     *
     * @param field          待恢复字段名
     * @param sensitiveValue 脱敏后的字段值
     * @param cacheName      缓存名称
     * @return 敏感信息恢复前后的对应关系
     * @throws Exception 异常
     */
    Map<String, String> recovery(String field, String sensitiveValue, String cacheName) throws Exception;

    /**
     * 敏感信息加密
     *
     * @param encryptKey    加密密钥
     * @param algorithmType 加密算法
     * @return 加密后的值
     * @throws Exception 异常
     */
    Map<String, String> encrypt(String encryptKey, String algorithmType) throws Exception;

    /**
     * 敏感信息加密
     *
     * @param txnSensitiveCfgList 交易敏感信息配置信息
     * @param encryptKey          加密密钥
     * @param algorithmType       加密算法
     * @return 加密前后的对应关系
     * @throws Exception 异常
     */
    Map<String, String> encrypt(List<TxnSensitiveCfg> txnSensitiveCfgList, String encryptKey, String algorithmType) throws Exception;

    /**
     * 敏感信息解密
     *
     * @param decryptKey    解密密钥
     * @param algorithmType 解密算法
     * @return 解密前后的对应关系
     * @throws Exception 异常
     */
    Map<String, String> decrypt(String decryptKey, String algorithmType) throws Exception;

    /**
     * 敏感信息解密
     *
     * @param txnSensitiveCfgList 交易敏感信息配置信息
     * @param decryptKey          解密密钥
     * @param algorithmType       解密算法
     * @return 解密前后的对应关系
     * @throws Exception 异常
     */
    Map<String, String> decrypt(List<TxnSensitiveCfg> txnSensitiveCfgList, String decryptKey, String algorithmType) throws Exception;
}
